package ar.com.arkios.kfcon4d.dao;

import ar.com.arkios.kfcon4d.util.RegisterBuilder;
import ar.com.arkios.kfconmodelo.modelo.CodigoEAN;
import ar.com.arkios.j4d.opDataArray;
import java.util.List;
import org.apache.log4j.Logger;

/**
 * <p>
 * 
 * </p>
 */
public class CodigoEANDAO extends GenericDAO<CodigoEAN> {
    
    private static final Logger miLogger = Logger.getLogger(CodigoEANDAO.class);
    
    /** Nombre de la tabla Especies */
    private static final String EAN = "EAN";
    
    // Columnas de la tabla Especies
    private static final String EAN_ARTICULO = "Articulo";
    private static final String EAN_EMBALAJE = "Embalaje";
    private static final String EAN_PESO = "Peso";
    private static final String EAN_VARIEDAD = "Variedad";
    private static final String EAN_ENVASE = "Envase";
    private static final String EAN_MARCA = "Marca";
    private static final String EAN_CATEGORIA = "Categoria";
    private static final String EAN_EAN = "EAN";
    private static final String EAN_TEXTO1 = "Texto1";
    private static final String EAN_TEXTO2 = "Texto2";
    private static final String EAN_OBS = "Obs";
    
    /** Nombres de las columnas a ser utilizadas de la tabla Especies. */
    private static final String[] ESPECIES_COLUMNAS = {EAN_ARTICULO, EAN_EMBALAJE, EAN_PESO, EAN_VARIEDAD, EAN_ENVASE, EAN_MARCA, EAN_CATEGORIA, EAN_EAN, EAN_TEXTO1, EAN_TEXTO2, EAN_OBS};
    
    /** Nombres de las columnas a ser utilizada como PK de Especies. */
    private static final String[] ESPECIES_PK = {EAN_ARTICULO};
    

    @Override
    protected String getEntidadKeyValue(CodigoEAN elem) {
        int desp = Math.min(elem.getMiCodigoArticulo().length(), 10);
        return elem.getMiCodigoArticulo().substring(elem.getMiCodigoArticulo().length() - desp);
    }

    @Override
    protected String getEntidadTableName() {
        return EAN;
    }

    @Override
    protected String getPKProperty() {
        return "miCodigoArticulo";
    }

    @Override
    protected opDataArray[] mapListEntidadTo4D(List<CodigoEAN> laLista) {
        opDataArray[] losDatosEspecies = new opDataArray[getMiEntidadFields().mSize];

        for (int i = 0; i < losDatosEspecies.length; i++) {
            losDatosEspecies[i] = new opDataArray(laLista.size());
        }

        int i = 0;
        int desp;
        for (CodigoEAN ean : laLista) {
            RegisterBuilder eanRegisterBuilder = new RegisterBuilder(getMiEntidadFields());
            desp = Math.min(ean.getMiCodigoArticulo().length(), 10);
            eanRegisterBuilder.setData(EAN_ARTICULO, ean.getMiCodigoArticulo().substring(ean.getMiCodigoArticulo().length() - desp));
            eanRegisterBuilder.setData(EAN_EMBALAJE, ean.getMiEmbalajeCod());
            eanRegisterBuilder.setData(EAN_PESO, ean.getMiPesoEnvase());
            eanRegisterBuilder.setData(EAN_VARIEDAD, ean.getMiVariedadCod());
            eanRegisterBuilder.setData(EAN_ENVASE, ean.getMiEnvaseCod());
            eanRegisterBuilder.setData(EAN_MARCA, ean.getMiMarcaCod());
            eanRegisterBuilder.setData(EAN_CATEGORIA, ean.getMiCategoriaCod());
            eanRegisterBuilder.setData(EAN_EAN, ean.getMiCodigo());
            eanRegisterBuilder.setData(EAN_TEXTO1, ean.getMiDescripcion1());
            eanRegisterBuilder.setData(EAN_TEXTO2, ean.getMiDescripcion2());
            eanRegisterBuilder.setData(EAN_OBS, ean.getMiObservacion());
            
            opDataArray dataAux = eanRegisterBuilder.getDataArray();
            for (int j = 0; j < getMiEntidadFields().mSize; j++) {
               losDatosEspecies[j].mDataArray[i] = dataAux.mDataArray[j];
            }
            i += 1;
        }
        return losDatosEspecies;
    }
    
    @Override
    protected String[] getEntidadFieldsNames(){
        return ESPECIES_COLUMNAS;
    }
    
    @Override
    protected String[] getEntidadPKFieldsNames(){
        return ESPECIES_PK;
    }
}